function ajax(obj) {
  // obj.url
  // obj.method
  // 解构赋值
  let { url, method, headers, data, success, error, params } = obj;

  let xhr = new XMLHttpRequest();

  if (params) {
    //判断是否存在搜索参数
    // { pagesize: 1, pagenum: 1 }
    //    url?pagenum=1&pagesize=

    let keyValueArr = [];
    for (let key in params) {
      keyValueArr.push(key + "=" + params[key]);
    }
    // console.log(keyValueArr.join("&"));
    url = url + "?" + keyValueArr.join("&");
  }

  //请求方式转为 大写
  xhr.open(method.toUpperCase(), url);

  // 判断 headers 是否存在-- 请请求头的配置 在 open 和send之间
  if (headers) {
    // xhr.setRequestHeader('key','value')
    // 遍历 对象 header
    for (let key in headers) {
      // console.log(key, headers[key]);
      xhr.setRequestHeader(key, headers[key]);
    }
  }

  //设置请求体-根据content-type
  // let contentType =   headers["content-type"];
  // headers 是undefined  获取undefined的属性会错
  let contentType = headers ? headers["content-type"] : null;

  if (contentType == "application/json") {
    //把data 请求体数据 转为json字符串
    let jsonStr = JSON.stringify(data);
    xhr.send(jsonStr);
  } else if (contentType == "application/x-www-form-urlencoded") {
    //把data 请求体数据 转为搜索字符串--  title=222&cpm=11
    let keyValueArr = [];
    for (let key in data) {
      keyValueArr.push(key + "=" + data[key]);
    }
    console.log(keyValueArr);
    xhr.send(keyValueArr.join("&"));
  } else if (data instanceof FormData) {
    // 如果data 是 表单对象--直接发送
    xhr.send(data);
  } else {
    xhr.send();
  }

  xhr.onload = function () {
    if (/^2/.test(xhr.status)) {
      //服务器返回的数据转为js对象
      let obj = JSON.parse(xhr.responseText);
      // 请求已经成功--调用外部写好的 成功函数--并且传入实参--
      success(obj);
    }
  };

  xhr.onerror = function () {
    //xhr 请求失败调用

    // 如果传入了error ，xhr失败的时候就调用
    if (error) {
      error();
    }
  };
}
